﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenTK.Graphics.OpenGL;

namespace MazeRunner.Graphics
{
	public static class Wall
	{
		public static void Draw(double x, double y)
		{
			GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToBorder);
			GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToBorder);

			GL.BindTexture(TextureTarget.Texture2D, OpenGLSetup.textures[0]);

			GL.Begin(BeginMode.Quads);
			GL.PushMatrix();
			GL.Translate(x, 0, y);
			// front face

			GL.Normal3(0.0, 0.0, 1.0);
			GL.TexCoord2(0, 0);
			GL.Vertex3(x * 2, -1, y * 2 + 2.0);
			GL.TexCoord2(1, 0);
			GL.Vertex3(x * 2 + 2.0, -1, y * 2 + 2.0);
			GL.TexCoord2(1, 1);
			GL.Vertex3(x * 2 + 2.0, 1, y * 2 + 2.0);
			GL.TexCoord2(0, 1);
			GL.Vertex3(x * 2, 1, y * 2 + 2.0);

			// back face
			GL.Normal3(0.0, 0.0, -1.0);
			GL.TexCoord2(0, 0);
			GL.Vertex3(x * 2, -1, y * 2);
			GL.TexCoord2(1, 0);
			GL.Vertex3(x * 2, 1, y * 2);
			GL.TexCoord2(1, 1);
			GL.Vertex3(x * 2 + 2.0, 1, y * 2);
			GL.TexCoord2(0, 1);
			GL.Vertex3(x * 2 + 2.0, -1, y * 2);

			// right face
			GL.Normal3(1.0, 0.0, 0.0);
			GL.TexCoord2(0, 0);
			GL.Vertex3(x * 2 + 2.0, -1, y * 2);
			GL.TexCoord2(1, 0);
			GL.Vertex3(x * 2 + 2.0, 1, y * 2);
			GL.TexCoord2(1, 1);
			GL.Vertex3(x * 2 + 2.0, 1, y * 2 + 2.0);
			GL.TexCoord2(0, 1);
			GL.Vertex3(x * 2 + 2.0, -1, y * 2 + 2.0);

			// left face
			GL.Normal3(-1.0, 0.0, 0.0);
			GL.TexCoord2(0, 0);
			GL.Vertex3(x * 2, -1, y * 2);
			GL.TexCoord2(1, 0);
			GL.Vertex3(x * 2, -1, y * 2 + 2.0);
			GL.TexCoord2(1, 1);
			GL.Vertex3(x * 2, 1, y * 2 + 2.0);
			GL.TexCoord2(0, 1);
			GL.Vertex3(x * 2, 1, y * 2);
			
			GL.PopMatrix();
			GL.End();
		}
	}

	public static class Open
	{
		public static void Draw(double x, double y)
		{
			GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToBorder);
			GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToBorder);

			GL.BindTexture(TextureTarget.Texture2D, OpenGLSetup.textures[1]);

			GL.Begin(BeginMode.Quads);
			GL.PushMatrix();
			GL.Translate(x, 0, y);

			// top face
			GL.Normal3(0.0, 1.0, 0.0);
			GL.TexCoord2(0, 0);
			GL.Vertex3(x * 2 + 2.0, 1, y * 2);
			GL.TexCoord2(1, 0);
			GL.Vertex3(x * 2 + 2.0, 1, y * 2 + 2.0);
			GL.TexCoord2(1, 1);
			GL.Vertex3(x * 2, 1, y * 2 + 2.0);
			GL.TexCoord2(0, 1);
			GL.Vertex3(x * 2, 1, y * 2);
			GL.End();

			GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToBorder);
			GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToBorder);

			GL.BindTexture(TextureTarget.Texture2D, OpenGLSetup.textures[2]);

			GL.Begin(BeginMode.Quads);
			GL.PushMatrix();
			GL.Translate(x, 0, y);

			// bottom face
			GL.Normal3(0.0, 1.0, 0.0);
			GL.TexCoord2(0, 0);
			GL.Vertex3(x * 2, -1, y * 2 + 2.0);
			GL.TexCoord2(1, 0);
			GL.Vertex3(x * 2 + 2.0, -1, y * 2 + 2.0);
			GL.TexCoord2(1, 1);
			GL.Vertex3(x * 2 + 2.0, -1, y * 2);
			GL.TexCoord2(0, 1);
			GL.Vertex3(x * 2, -1, y * 2);

			GL.PopMatrix();
			GL.End();
		}
	}
}
